<?php

namespace app\common\model;



use app\common\dict\LogLevelDict;
use app\common\dict\TaskStatusDict;
use app\common\dict\TaskTypeDict;
use think\Model;


/**
 * 任务列队模型
 * Class QueueTasks
 * @property int $id 任务ID
 * @property int $site_id 站点ID
 * @property int $type 任务类型
 * @property int $admin_id 操作员ID，默认0（系统）
 * @property string $title 任务标题
 * @property string $class_name 完整的任务类名
 * @property array $params 任务参数
 * @property string $attachment 相关附件
 * @property int $start_time 开始时间
 * @property int $end_time 结束时间
 * @property int $status 任务状态
 * @property int $create_time 创建时间
 */
class QueueTasks extends Model
{


    protected $name = 'queue_tasks';


    protected $json = ['params'];


    protected $updateTime = false;


    // 设置JSON数据返回数组
    protected $jsonAssoc = true;



    // 附加字段
    protected $append = [
        'status_text',
        'type_text',
        'take'
    ];




    public static function onAfterDelete($model)
    {
        QueueTaskLog::destroy(function ($query) use ($model) {
            $query->where('task_id', $model->id);
        });
    }




    /**
     * 状态文本
     * @param $value
     * @param $data
     * @return string
     */
    public function getStatusTextAttr($value, $data)
    {
        return TaskStatusDict::getDictValue($value ?? 0);
    }


    /**
     * 任务类型文本
     * @param $value
     * @param $data
     * @return string
     */
    public function getTypeTextAttr($value, $data)
    {
        return TaskTypeDict::getDictValue($value ?? 0);
    }


    /**
     * 添加日志
     * @param string $message
     * @param string $level
     * @return bool
     */
    public function addLog(string $message, string $level = LogLevelDict::INFO): bool
    {
        return (bool)QueueTaskLog::create([
            'task_id' => $this->id,
            'site_id' => $this->site_id,
            'message' => $message,
            'level' => $level,
            'create_time' => time()
        ]);
    }


    public function getTakeAttr($value, $data)
    {
        if(!empty($data['start_time']) && empty($data['end_time'])){
            return time() - $data['end_time'] . '秒';
        }
        if(!empty($data['start_time']) && !empty($data['end_time'])){
            return $data['end_time'] - $data['start_time'] . '秒';
        }
        return '0秒';
    }



    public function logs()
    {
        return $this->hasMany('QueueTaskLog', 'task_id', 'id');
    }


    public function site()
    {
        return $this->belongsTo('app\site\model\Site',  'site_id','site_id');
    }




}